#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include "libConsola.h"
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>

void main() {
	char comando[100];
	int32_t descriptor;
	struct sockaddr_in *local_address;
	struct sockaddr_in *direccion_proceso;
	char* respuesta;
	char chs[6];
	chs_t CHS;
	uint8_t i;
	uint8_t max;
	chs_t cabezal;
	chs_t proximoSector, sectorSiguiente;
	char modoInicio[8];
	char *IP;
	char *puerto;
	char *ID;
	uint8_t algoritmo;
	char *path;
	uint16_t flagDeLog;
	uint16_t tiempoLectura;
	uint16_t tiempoEscritura;
	uint16_t RPM;
	uint16_t tiempoSaltoPistas;

	leerArchivoConfiguracion("/home/utn_so/Escritorio/prueba.txt", &modoInicio,
			&IP, &puerto, &ID, &algoritmo, &path, &flagDeLog, &tiempoLectura,
			&CHS, &tiempoEscritura, &RPM, &tiempoSaltoPistas);

	local_address = malloc(sizeof(struct sockaddr_in));
	local_address->sin_family = AF_UNIX;
	local_address->sin_addr.s_addr = INADDR_ANY;
	local_address->sin_port = 1991;

	direccion_proceso = malloc(sizeof(struct sockaddr_in));
	direccion_proceso->sin_family = AF_UNIX;
	direccion_proceso->sin_addr.s_addr = INADDR_ANY;
	direccion_proceso->sin_port = 5300;

	descriptor = (int32_t) socket(AF_UNIX, SOCK_STREAM, 0);

	printf("C: %d, H: %d, S: %d\n", CHS.cilindro, CHS.pista, CHS.sector);
	while (1) {
		printf("ingrese comando: \n");
		fflush(stdin);
		scanf("%s", comando);
		printf("comando leido\n");
		if (connect(descriptor, (struct sockaddr*) direccion_proceso,
				sizeof(struct sockaddr_in)) == -1) {
		} else {

			if (send(descriptor, comando, sizeof(comando), 0) == -1) {
				perror("send()");
			} else {
				if (recv(descriptor, respuesta, 19, 0) == -1) {
					perror("recv()");
				} else {

					if (respuesta[0] == 0) {
						uint16_t c = respuesta[1] * 256 + respuesta[2];
						uint16_t p = respuesta[3] * 256 + respuesta[4];
						uint16_t s = respuesta[5] * 256 + respuesta[6];
						printf("la posicion del cabezal es: %d:%d:%d.\n", c, p,
								s);
					}
					if (respuesta[0] == 1) {
						printf("sectores borrados\n");
					}
					if (respuesta[0] == 2) {
						max = cantidadSectoresSolicitados(comando);
						if (max <= 5) {
							for (i = 1; i < max; i++) {
								if (i == 1) {
								} else {
									recv(descriptor, respuesta, 19, 0);
								}
								//creo que tengo que hacer otro recv
								cabezal.cilindro = respuesta[1] * 256
										+ respuesta[2];
								cabezal.pista = respuesta[3] * 256
										+ respuesta[4];
								cabezal.sector = respuesta[5] * 256
										+ respuesta[6];
								proximoSector = proximoSectorF(respuesta);
								sectorSiguiente = sectorSiguienteF(respuesta);
								printf(
										"calculando el trace del %d sector solicitado de %d\n",
										i, max);
								llegarAPosicion(cabezal, proximoSector,
										sectorSiguiente, CHS, RPM,
										tiempoSaltoPistas);
							}
							printf(
									"todos los sectores solicitados fueron atendidos\n");
						} else {
							printf(
									"se ingresan más sectores de los permitidos (5)\n");
						}
					}
				}
			}
		}
	}

	return;
}
